<?php

class Application_Model_Mapper_AuthMapper
{
	protected $_dbTable;

	public function setDbTable ($dbTable)
	{
		
		if (is_string($dbTable))
		{
			$dbTable = new $dbTable();
		}
		if (! $dbTable instanceof Zend_Db_Table_Abstract)
		{
			throw new Exception('Invalid table data gateway provided');
		}
		$this->_dbTable = $dbTable;
		return $this;
		
	}

	public function getDbTable ()
	{
		
		if (null === $this->_dbTable)
		{
			$this->setDbTable('Application_Model_DbTable_Auth');
		}
		return $this->_dbTable;
		
	}

	public function add (Application_Model_Auth $auth)
	{		
		//$now = new DateTime();
		
		$generatedid = uniqid();
		$generatedidcheck = $this->fetchID($generatedid);
		if(empty($generatedidcheck)){
		
			$data = array(
				'id' => $generatedid,
				'created' => date('Y-m-d H:i:s'),
				'vorname' => $auth->getVorname(),
				'password' => Sha1($auth->getPassword()),
				'role' => 'user',
				'mail' => $auth->getMail());
		
			return $this->getDbTable()->insert($data);
		}
		else{
			$this->add($auth);
		}
	}

	public function letzteslogindatum($id)
	{
		$now = new DateTime();
		$data = array(
				'letzterlogin' => date('Y-m-d H:i:s'));
		return $this->getDbTable()->update($data, array(
				'id = ?' => $id));
		
	}
	
	public function activate($id)
	{
		$data = array(
				'active' => true);
		return $this->getDbTable()->update($data, array(
				'id = ?' => $id));
	}

	public function delete ($id)
	{
		
	}

	public function update($daten, $id)
	{

		
		/*
		$data = array(
				'vorname' => $auth->getVorname(),
				'nachname' => $auth->getNachname(),
				'nachnamesichtbar' => $auth->getNachnamesichtbar(),
				'nachnamegruppen' => $auth->getNachnamegruppen(),
				'geschlechtm' => $auth->getGeschlechtm(),
				'geschlechtsichtbar' => $auth->getGeschlechtsichtbar(),
				'geschlechtgruppen' => $auth->getGeschlechtgruppen(),
				'land' => $auth->getLand(),
				'landsichtbar' => $auth->getLandsichtbar(),
				'landgruppen' => $auth->getLandgruppen(),
				'plz' => $auth->getPlz(),
				'plzsichtbar' => $auth->getPlzsichtbar(),
				'plzgruppen' => $auth->getPlzgruppen(),
				'tel' => $auth->getTel(),
				'telsichtbar' => $auth->getTelsichtbar(),
				'telgruppen' => $auth->getTelgruppen(),
				'landervorwahl' => $auth->getLandervorwahl(),
				'landervorwahlsichtbar' => $auth->getLandervorwahlsichtbar(),
				'landervorwahlgruppen' => $auth->getLandervorwahlgruppen(),
				'geburtsort' => $auth->getGeburtsort(),
				'geburtsortsichtbar' => $auth->getGeburtsortsichtbar(),
				'geburtsortgruppen' => $auth->getGeburtsortgruppen(),
				'beziehungsstatus' => $auth->getBeziehungsstatus(),
				'beziehungsstatussichtbar' => $auth->getBeziehungsstatussichtbar(),
				'beziehungsstatusgruppen' => $auth->getBeziehungsstatusgruppen(),
				'binnenlizenz' => $auth->getBinnenlizenz(),
				'binnenlizenzsichtbar' => $auth->getBinnenlizenzsichtbar(),
				'binnenlizenzgruppen' => $auth->getBinnenlizenzgruppen(),
				'offshorelizenz' => $auth->getOffshorelizenz(),
				'offshorelizenzsichtbar' => $auth->getOffshorelizenzsichtbar(),
				'offshorelizenzgruppen' => $auth->getOffshorelizenzgruppen(),
				'homepage' => $auth->getHomepage(),
				'homepagesichtbar' => $auth->getHomepagesichtbar(),
				'homepagegruppen' => $auth->getHomepagegruppen()
		);
		*/
		$this->getDbTable()->update($daten, array('id = ?' => $id));
	}
	
	public function updatepapierkorb(Application_Model_Auth $auth)
	{
		$now = new DateTime();
	
		$data = array(
				'papierkorbpinnwandeintrag' => $auth->getPapierkorbpinnwandeintrag(),
				'papierkorbnachrichten' => $auth->getPapierkorbnachrichten(),
				'papierkorbkommentare' => $auth->getPapierkorbkommentare(),
				'papierkorbbilder' => $auth->getPapierkorbbilder()
		);
		$this->getDbTable()->update($data, array('id = ?' => $auth->getId()));
	
	}


	public function fetchID($id)
	{
		$db = Zend_Db_Table::getDefaultAdapter();
		$entry = new Zend_Db_Select($db);
		$entry->from('users');
		$entry->where('users.id = ?', $id);
		return $entry->query()->fetch();
	}

	public function fetchMail($mail)
	{
		$db = Zend_Db_Table::getDefaultAdapter();
		$entry = new Zend_Db_Select($db);
		$entry->from('users');
		$entry->where('users.mail = ?', $mail);
		return $entry->query()->fetch();
	}

	public function fetchAll()
	{
 		$db = Zend_Db_Table::getDefaultAdapter();
 		$entry = new Zend_Db_Select($db);
		$entry->from('users');
		return $entry->query()->fetchall();
	}

	public function fetchVorname($id)
	{
		$db = Zend_Db_Table::getDefaultAdapter();
		$entry = new Zend_Db_Select($db);
		$entry->from('users', array('vorname'));
		$entry->where('users.id = ?', $id);
		$entry =  $entry->query()->fetch();
		return $entry['vorname'];
	}

	public function usersearch($formData)
	{
		$db = Zend_Db_Table::getDefaultAdapter();
		$entry = new Zend_Db_Select($db);
		$entry->from('users');
		
		if(!empty($formData['vorname'])){
			$entry->where('users.vorname like "%' . $formData['vorname'] . '%"');
		}
		if(!empty($formData['mail'])){
			$entry->where('users.mail = ?', $$formData['mail']);
		}
		
		return $entry->query()->fetchall();
	}
	
	public function fetchactivefriends($id){
		
		$mapperfriends = new Application_Model_Mapper_FriendlistMapper();
		$freundesliste = $mapperfriends->fetchlist($id);
			
		if(!empty($freundesliste[0])){
			$i = 0;
			$freundeslisterueck = array();
			foreach($freundesliste as $array1){
				if($array1['akzeptiert']){
					if($array1['friendid'] == $id){
						$freundeslisterueck[$i] = $array1['userid'];
					}
					if($array1['userid'] == $id){
						$freundeslisterueck[$i] = $array1['friendid'];
					}
					++$i;
				}
			}

			
			$db = Zend_Db_Table::getDefaultAdapter();
			$entry = new Zend_Db_Select($db);
			$entry->from('users');
			$entry->where('users.id = 0');
			foreach($freundeslisterueck as $array){
				$entry->orwhere('users.id = ?', $array);
			}
// 			$entry->where('users.id IN (?)', $freundesliste);
			$entry->limit(3);
			$entry->order('letzterlogin DESC');
			return $entry->query()->fetchall();
		}
	}
	
	public function aendereshowlastfriendsonline($id)
	{
		$mapperauth = new Application_Model_Mapper_AuthMapper();
		$eintrag = $mapperauth->fetchID($id);
		 
		$data = array(
				'showlastfriendsonline' => (!$eintrag['showlastfriendsonline']));
		return $this->getDbTable()->update($data, array(
				'id = ?' => $id));
	}
	
	public function aendereshowlastvisited($id)
	{
		$mapperauth = new Application_Model_Mapper_AuthMapper();
		$eintrag = $mapperauth->fetchID($id);
		 
		$data = array(
				'showlastvisited' => (!$eintrag['showlastvisited']));
		return $this->getDbTable()->update($data, array(
				'id = ?' => $id));
	}

	public function aendereshowlastmessages($id)
	{
		$mapperauth = new Application_Model_Mapper_AuthMapper();
		$eintrag = $mapperauth->fetchID($id);
			
		$data = array(
				'showlastmessages' => (!$eintrag['showlastmessages']));
		return $this->getDbTable()->update($data, array(
				'id = ?' => $id));
	}
	
}